package chixing.day20.proxy.homework.work4;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ContractService {
    private static List<Contract> contractList = new ArrayList<>();

    public static void add(Contract contract) {
        contractList.add(contract);
    }
    public static void display(){
        contractList.forEach(System.out::println);
    }

    /**
     * 提交批准
     *
     * @param contractId 提交的合同id
     */
    public void submitForApproval(String contractId) {
        for (Contract c : contractList) {
            if (c.getContractId().equals(contractId)) {
                c.setContractStatus(Status.PENDING_APPROVAL);//状态设为待批准状态
                System.out.println("合同 "+ c.getContractId() +" 提交审批，状态: " + c.getContractStatus());
            }
        }
    }

    /**
     * 批准
     *
     * @param contractId 需要批准的合同id
     */
    public void approve(String contractId) {
        for (Contract c : contractList) {
            if (c.getContractId().equals(contractId)) {
                c.setContractStatus(Status.APPROVED);//状态设为批准状态
                System.out.println("合同 "+ c.getContractId() +" 审批通过，状态: " + c.getContractStatus());
            }
        }
    }

    /**
     * 拒绝
     *
     * @param contractId 被拒绝 的合同id
     */
    public void reject(String contractId) {
        for (Contract c : contractList) {
            if (c.getContractId().equals(contractId)) {
                c.setContractStatus(Status.REJECTED);//状态设为拒绝状态
                System.out.println("合同 "+ c.getContractId() +" 审批被拒绝，状态: " + c.getContractStatus());
            }
        }
    }

    /**
     * 获取所有某个状态的合同
     *
     * @param status 想要查看的合同的状态
     * @return 返回 该状态 的合同列表
     */
    public List<Contract> getContractsByStatus(Status status) {
        List<Contract> list = new ArrayList<>();
        for (Contract c : contractList) {
            if (c.getContractStatus().equals(status))
                list.add(c);
        }
        return list;
    }

    /**
     * 按部门统计总金额
     *
     * @param dept 需要统计的部门
     * @return 总金额
     */
    public double totalAmountByDepartment(String dept) {
        //遍历合同列表，找到要统计的部门的合同，计算出合同总额
        double amount = 0;
        for (Contract c : contractList) {
            if (c.getDepartment().equals(dept))
                amount += c.getContractAmount();
        }
        return amount;
    }

    /**
     * 按供应商进行分类
     *
     * @return 分类后的map集合
     */
    public Map<String, List<String>> groupBySupplier() {
        Map<String, List<String>> map = new HashMap<>();
        //遍历合同列表，取出供应商的姓名，判断该供应商是否出现在map集合中，
        //出现过就取出对应的list集合将该合同的合同id加入到list中
        for (Contract c : contractList) {
            if (!map.containsKey(c.getSupplier())) {//不存在
                List<String> list = new ArrayList<>();
                list.add(c.getContractId());
                map.put(c.getSupplier(), list);
            } else {
                map.get(c.getSupplier()).add(c.getContractId());
            }
        }
        return map;
    }
}
